/*
 *  Copyright 2015-2016, RenGu Technology (BeiJing) Co., Ltd.
 *  All right reserved.
 *
 *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF RENGU TECHNOLOGY (BeiJing) CO., LTD.
 *
 *  THE CONTENTS OF THIS FILE MAY NOT BE DISCLOSED TO THIR PARTIES,
 *  COPIED OR DUPLICATED IN ANY FORM, IN WHOLE OR IN PART,
 *  WITHOUT THE PRIOR WRITTEN PERMISSION OF RENGU TECHNOLOGY (BeiJing) CO., LTD.
 *
 *  AcctCustomerInfoMapper
 *
 *  Edit History:
 *      lizhangtao Created on 2020年04月09日
 *
 */
package cc.rengu.igas.acct.common.dao;

import cc.rengu.igas.acct.common.entity.AcctCustomerInfo;
import cc.rengu.oltp.service.model.BizException;
import cc.rengu.oltp.utility.util.DbsUtil;

/**
 * 账户模块客户信息表操作接口
 *
 * @author lizhangtao
 */
public interface AcctCustomerInfoMapper {

    /**
     * 插入账户客户信息表，数据库事务SQL执行
     *
     * @param acctCustomerInfo 账户信息表对应实体
     * @param dbs              数据库操作句柄
     * @return Database.DBS_SUCCESS成功，
     * Database.DBS_PKEY_DUPLICATE主键重复，
     * 违反唯一约束需要自己判断，其他失败
     * 为区别普通的数据库返回的应答码及异常，异常时返回Integer.MIN_VALUE
     */
    int insert2AcctCustomerInfo(AcctCustomerInfo acctCustomerInfo, DbsUtil dbs);

    /**
     * 以法人机构、外部用户类型、客户标识查询账户客户信息
     *
     * @param instId   法人机构
     * @param userType 外部用户类型
     * @param userId   客户标识
     * @param dbs      数据库操作句柄
     * @return 查询到数据返回账户客户信息实体, 无数据返回null
     * @throws BizException 其他错误及异常都抛出异常
     */
    AcctCustomerInfo selectAcctCustomInfoByUserId(String instId, String userType, String userId, DbsUtil dbs) throws BizException;

    /**
     * 使用法人机构号、客户号查询客户信息
     *
     * @param instId     法人机构号
     * @param customerId 客户号
     * @return 成功返回客户信息、无数据返回null
     * @throws BizException 其他失败及异常抛出异常
     */
    AcctCustomerInfo selectAcctCustomInfoByCustomerId(String instId, String customerId) throws BizException;

    /**
     * 删除客户信息
     * 不带事物，不提交不回滚用于外部事物begin和end之间
     *
     * @param instId     法人机构
     * @param customerId 客户号
     * @param dbs        数据库操作句柄
     * @return Database.DBS_SUCCESS成功，其他失败
     * 为区别普通的数据库返回的应答码及异常，异常时返回Integer.MIN_VALUE
     */
    int delCustomerByCustomerId(String instId, String customerId, DbsUtil dbs);

    /**
     * 更新客户信息状态
     *
     * @param instId     法人机构号
     * @param customerId 客户号
     * @param status     状态
     * @param dbs        数据库操作句柄
     * @return
     */
    int updCustomerStatusByCustomerId(String instId, String customerId, String status, DbsUtil dbs);
}
